from flask import request, g
from utils.jwt_util import verify_jwt

# @app.before_request
# def jwt_authentication():
#     pass

# 因为current_app需要在应用上下文之内使用，这个模块在应用之外，所以没办事使用@current_app.before_request
# 装饰器的作用相当于
# app.before_request(jwt_authentication)
# 所以在创建app的时候，除了加载配置之外，可以设置请求钩子
# app.before_request(jwt_authentication)的作用实际是self.before_request_funcs.setdefault(None, []).append(f)在app的before_request_funcs中加入一个方法，我们不调用，所以不用变量接收


# def jwt_authentication():
#     # 获取请求头中的token
#     # Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twF
#     # t5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg
#
#     g.user_id = None
#     g.is_refresh = False
#
#     token = request.headers.get('Authorization')
#     if token is not None and token.startswith('Bearer '):
#         token = token[7:]
#
#         # 验证token
#         payload = verify_jwt(token)
#
#         if payload is not None:
#             # 保存到g对象中
#             g.user_id = payload.get('user_id')
#             g.is_refresh = payload.get('is_refresh', False)

def jwt_authentication():
    # 获取请求头中的token
    # Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twF
    # t5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg

    # 给g对象设置默认值，以备及时没有payload，也能拿到数据
    g.user_id = None
    g.is_refresh = False

    token = request.headers.get('Authonrization')
    if token is not None and token.startswith('Bearer '):
        token = token[7:]
        # 验证token
        payload = verify_jwt(token)
        if payload is not None:
            # 保存到g对象中
            g.user_id = payload.get('user_id')
            g.is_refresh = payload.get('is_refresh', False)
